fix: 新增 extensionEnv 处理 isIncognito (early-start & bgScript), userAgent (bgScript) 及 run-in (bgScript)#1368
Merged
CodFrm merged 8 commits intorelease/v1.4from Apr 27, 2026
Conversation
…gScript) 及 run-in (bgScript)
Contributor
There was a problem hiding this comment.
Pull request overview
该 PR 主要为 early-start 与后台/定时脚本补齐 extensionEnv 信息传递链路,使脚本能够正确获取 GM_info.isIncognito、GM_info.userAgentData,并让后台/定时脚本支持按 @run-in 控制仅在指定上下文执行(normal / incognito / all)。
Changes:
- 在 scripting → inject/content 与 sandbox → offscreen → service worker 的消息链路中引入
extensionEnv(incognito + userAgentData),并注入到运行时 envInfo。 - 后台/定时脚本执行前根据
@run-in与inIncognitoContext做上下文过滤,避免双环境重复运行。 - GM_xhr 的 DNR Session Rule ID 分配改为集中控制(
dnr_id_controller)并补充单测与 mock 能力。
Reviewed changes
Copilot reviewed 19 out of 19 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| src/inject.ts | 接收并传入 extensionEnv 到 ScriptRuntime(inject 侧)。 |
| src/content.ts | 接收并传入 extensionEnv 到 ScriptRuntime(content 侧)。 |
| src/app/service/service_worker/runtime.ts | userAgentData 初始化逻辑抽到 getExtensionUserAgentData。 |
| src/app/service/service_worker/index.ts | 新增 getExtensionEnv API,供 offscreen/sandbox 拉取 extensionEnv。 |
| src/app/service/service_worker/gm_api/gm_api.ts | GM_xhr DNR session rule id 改为受控分配/释放,并在更多错误分支做清理。 |
| src/app/service/service_worker/gm_api/dnr_id_controller.ts | 新增 session rule id 控制器:获取现有 rule、分配 id、释放 id、限额等待。 |
| src/app/service/service_worker/gm_api/dnr_id_controller.test.ts | 为 dnr_id_controller 增加单测覆盖。 |
| src/app/service/sandbox/runtime.ts | 后台/定时脚本执行前拉取 extensionEnv,并按 @run-in 过滤执行环境。 |
| src/app/service/sandbox/index.ts | sandbox 初始化时发起 extensionEnv 拉取并注入 Runtime。 |
| src/app/service/offscreen/index.ts | offscreen 增加 getExtensionEnv 转发到 service worker。 |
| src/app/service/offscreen/client.ts | 新增 getExtensionEnv 的 client 方法(sandbox → offscreen)。 |
| src/app/service/extension/extension_env.ts | 新增 extensionEnv 定义与 userAgentData 获取方法。 |
| src/app/service/content/script_runtime.ts | early-start 检测时将 inIncognitoContext 写入 initialEnvInfo.isIncognito。 |
| src/app/service/content/script_executor.ts | initEnvInfo 显式标注 GMInfoEnv,并更新 isIncognito 注释语义。 |
| src/app/service/content/exec_warp.ts | BgExecScriptWarp 支持从 extensionEnv 注入 isIncognito 与 userAgentData。 |
| packages/message/common.ts | eventFlag 协商流程携带 extensionEnv(用于 inject/content early-start)。 |
| packages/chrome-extension-mock/web_reqeuest.ts | mock webRequest 增加 onResponseStarted 回调入口。 |
| packages/chrome-extension-mock/declarativ_net_request.ts | mock DNR 增加 session rules 存取与 updateSessionRules 行为模拟。 |
| example/tests/gm_menu_test.js | 新增 GM_registerMenuCommand 行为示例脚本。 |
Comment on lines
+53
to
+55
| it("sessionRuleIds 未初始化时为 no-op", () => { | ||
| expect(() => removeSessionRuleIdEntry(10404)).not.toThrow(); | ||
| }); |
There was a problem hiding this comment.
该用例名为“sessionRuleIds 未初始化时为 no-op”,但当前测试文件在此之前已调用过 getSessionRuleIds/nextSessionRuleId,模块级 sessionRuleIds 很可能已经初始化了,导致这个用例并未真正覆盖“未初始化”的分支。建议在该用例里通过 vi.resetModules()+重新 import,或为 dnr_id_controller 暴露仅测试可用的 reset 方法来明确验证未初始化场景。
- extension_env.test.ts:覆盖 getExtensionUserAgentData 的 navigator 缺失、platformInfo 异常、bitness 64/32 派生 - exec_warp.test.ts:覆盖 BgExecScriptWarp 把 extensionEnv 注入 GM_info 的各分支 - sandbox/runtime.test.ts:覆盖 execScript 中 run-in × inIncognitoContext 的过滤逻辑(含 extensionEnv 为 undefined 的 fail-open 行为)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Checklist / 检查清单
Description / 描述
early-start
bgScript
Screenshots / 截图